
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.concurrent.Semaphore;

public class Central {
	
	public static int id = 0;
    public static int operadoresOcupados = 0;
    public static LinkedList<Llamada> bufferLlamadasEntrantes = new LinkedList<Llamada>();
    public static Map<Integer,LinkedList<Llamada>> bufferADespachar = new HashMap<Integer, LinkedList<Llamada>>();
    ArrayList<Operador> operadores = new ArrayList<Operador>();
    Semaphore semLlamadasEntrantes = new Semaphore(1);

    Semaphore semBufferADespachar = new Semaphore(1);

    Despachante despachante = new Despachante(semBufferADespachar);
    Timer timer = new Timer();

    public void AgregarLlamada(Llamada llamada){
        bufferLlamadasEntrantes.add(llamada);
    }

    public void AgregarOperador(){
    	id++;
        operadores.add(new Operador(id,semLlamadasEntrantes,semBufferADespachar));
    }

    public void ComenzarDia(){

        for(Operador operador : operadores){
            operador.start();
        }
        despachante.start();
        timer.start();
        

        try {
			despachante.join();
			timer.join();
		} catch (InterruptedException e1) {
			e1.printStackTrace();
		}

        for(Operador operador : operadores){
            try {
                operador.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }

}
